package com.twb.auth.service;

import java.util.List;
import java.util.Set;

import com.twb.auth.entity.twbOrganization.TwbOrganization;
import com.twb.auth.entity.twbOrganization.dto.GetTwbOrganizationByIdDto;
import com.twb.auth.entity.twbOrganization.dto.SearchTwbOrganizationDto;
import com.twb.auth.entity.twbOrganization.dto.SearchTwbOrganizationTreeDto;
import com.twb.auth.entity.twbOrganization.dto.TwbOrganizationDto;
import com.twb.auth.entity.twbOrganization.vo.SaveTwbOrganizationVo;
import com.twb.auth.entity.twbOrganization.vo.SearchTwbOrganizationTreeVo;
import com.twb.auth.entity.twbOrganization.vo.SearchTwbOrganizationVo;
import com.twb.core.base.entity.TwbPageInfo;
import com.twb.core.base.service.IBaseService;

/**
 * @ClassName ITwbOrganizationService
 * @Description 机构部门service
 * @author DSY
 * @date 2018年11月6日 下午4:23:26
 */
public interface ITwbOrganizationService extends IBaseService<TwbOrganization> {

	/**
	 * @Title  listOrganizationByUserId
	 * @Description 根据用户ID加载用户部门信息
	 * @param userId
	 * @return
	 * @author DSY
	 * @date 2018年11月6日 下午4:44:50
	 */
	Set<TwbOrganization> listOrganizationByUserId(String userId);

	/**
	 * @Title  getTwbOrganizationById
	 * @Description 根据ID获取组织机构详情
	 * @param id
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 下午12:11:05
	 */
	GetTwbOrganizationByIdDto getTwbOrganizationById(String id);

	/**
	 * @Title  searchTwbOrganization
	 * @Description 分页查询组织机构
	 * @param vo
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 上午10:11:39
	 */
	TwbPageInfo<SearchTwbOrganizationDto> searchTwbOrganization(SearchTwbOrganizationVo vo);

	/**
	 * @Title  searchTwbOrganizationTree
	 * @Description 机构树查询
	 * @param vo
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 上午10:31:02
	 */
	List<SearchTwbOrganizationTreeDto> searchTwbOrganizationTree(SearchTwbOrganizationTreeVo vo);

	/**
	 * @Title  saveTwbOrganization
	 * @Description 保存组织机构
	 * @param vo
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 上午11:00:40
	 */
	String saveTwbOrganization(SaveTwbOrganizationVo vo);

	/**
	 * @Title  deleteTwbOrganizationById
	 * @Description 删除组织机构
	 * @param id
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 下午12:22:04
	 */
	boolean deleteTwbOrganizationById(String id);
	
	/**
	 * @Title logicDeleteTwbOrganizationById
	 * @Description 逻辑删除组织机构
	 * @param id
	 * @return
	 * @author DSY
	 * @date 2021年3月10日 下午4:48:54
	 */
	boolean logicDeleteTwbOrganizationById(String id);

	/**
	 * @Title  listChildrenOrgIds
	 * @Description 获取所有子部门
	 * @param parentId
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 下午4:57:11
	 */
	List<String> listChildrenOrgIds(String parentId);

	/**
	 * @Title  saveOrgResource
	 * @Description 保存机构权限
	 * @param orgId
	 * @param resIds
	 * @return
	 * @author DSY
	 * @date 2018年11月22日 下午5:35:49
	 */
	int saveOrgResource(String orgId, String resIds);

	/**
	 * @Title  searchUserOrganizationTree
	 * @Class: ITwbOrganizationService.java
	 * @Description 查询用户机构树
	 * @param userId
	 * @return
	 * @author DSY
	 * @date 2018年11月25日 下午8:54:40
	 */
	List<TwbOrganizationDto> searchUserOrganizationTree(String userId);

	/**
	 * @Title getOrgParentNames
	 * @Description 获取所有父节点的名称
	 * @param id
	 * @return
	 * @author DSY
	 * @date 2020年7月16日 上午11:11:00
	 */
	String getOrgParentNames(String id);
	
	/**
	 * @Title resetSearchKey
	 * @Description 重置组织机构SearchKey
	 * @return
	 * @AuthorOriginally DHL
	 * @date 2021年7月19日 上午11:51:21
	 */
	int resetSearchKey();
	
	/**
	 * @Title getDeptOfCompanyOrgId
	 * @Description 获取部门所属公司
	 * @param deptId
	 * @return
	 * @AuthorOriginally DSY
	 * @date 2022年8月8日 下午6:21:28
	 */
	TwbOrganization getDeptOfCompanyOrgId(String deptId);
	
	/**
	 * @Title listParentOrgsById
	 * @Description 根据部门id查询该部门的上级部门
	 * @param id
	 * @return
	 * @AuthorOriginally DSY
	 * @date 2022年11月11日 下午5:53:06
	 */
	List<TwbOrganization> listParentOrgsById(String id);
}
